Micron Document
NexusPi Git Node


Displaying Raw • Download

lib/microReticulum/src/Utilities/OS.h copilot/add-rtnode-configuration-options (9529fa8a) Text, 6.96 KB

Tff7b72#Tff7b72pragma once

Tff7b72#Tff7b72include T8b949e"../FileSystem.h"
Tff7b72#Tff7b72include T8b949e"../FileStream.h"
Tff7b72#Tff7b72include T8b949e"../Bytes.h"

Tff7b72#Tff7b72include T8b949e"tlsf.h"

Tff7b72#Tff7b72include T8b949e<cmath>
Tff7b72#Tff7b72include T8b949e<unistd.h>
Tff7b72#Tff7b72include T8b949e<time.h>
Tff7b72#Tff7b72include T8b949e<stdint.h>
Tff7b72#Tff7b72include T8b949e<sys/time.h>

Tff7b72#Tff7b72ifdef ARDUINO
Tff7b72#Tff7b72include T8b949e<Arduino.h>
Tff7b72#Tff7b72endif

Tff7b72#Tff7b72undef round

Te6edf3namespace Te6edf3RNS Tb4b4b4{ Te6edf3namespace Te6edf3Utilities Tb4b4b4{

Te6edf3class Te6edf3OS Tb4b4b4{

Te6edf3privateTff7b72:
Tff7b72static Te6edf3FileSystem Te6edf3_filesystemTb4b4b4;
Tff7b72static Tffa657uint64_t Te6edf3_time_offsetTb4b4b4;

Te6edf3publicTff7b72:
Tff7b72static Te6edf3tlsf_t Te6edf3_tlsfTb4b4b4;

Te6edf3publicTff7b72:
Tff7b72static Tff7b72inline Tffa657uint64_t Te6edf3getTimeOffsetTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_time_offsetTb4b4b4; Tb4b4b4}
Tff7b72static Tff7b72inline Tffa657void Te6edf3setTimeOffsetTb4b4b4(Tffa657uint64_t Te6edf3offsetTb4b4b4) Tb4b4b4{ Te6edf3_time_offset Tff7b72= Te6edf3offsetTb4b4b4; Tb4b4b4}

Tff7b72#Tff7b72ifdef ARDUINO
T8b949e// return current time in milliseconds since startup
Tff7b72static Tff7b72inline Tffa657uint64_t Te6edf3ltimeTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// handle roll-over of 32-bit millis (approx. 49 days)
Tff7b72static Tffa657uint32_t Te6edf3low32Tb4b4b4, Te6edf3high32Tb4b4b4;
Tffa657uint32_t Te6edf3new_low32 Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3new_low32 Tff7b72< Te6edf3low32Tb4b4b4) Te6edf3high32Tff7b72+Tff7b72+Tb4b4b4;
Te6edf3low32 Tff7b72= Te6edf3new_low32Tb4b4b4;
Tff7b72return Tb4b4b4(Tb4b4b4(Tffa657uint64_tTb4b4b4)Te6edf3high32 Tff7b72<Tff7b72< T79c0ff32 Tff7b72| Te6edf3low32Tb4b4b4) Tff7b72+ Te6edf3_time_offsetTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72else
T8b949e// return current time in milliseconds since 00:00:00, January 1, 1970 (Unix Epoch)
Tff7b72static Tff7b72inline Tffa657uint64_t Te6edf3ltimeTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3timeval Te6edf3timeTb4b4b4; Tff7b72:Tff7b72:Te6edf3gettimeofdayTb4b4b4(Tff7b72&Te6edf3timeTb4b4b4, Tffa657NULLTb4b4b4)Tb4b4b4; Tff7b72return Tb4b4b4(Tffa657uint64_tTb4b4b4)Tb4b4b4(Te6edf3timeTb4b4b4.Te6edf3tv_sec Tff7b72* T79c0ff1000Tb4b4b4) Tff7b72+ Tb4b4b4(Tffa657uint64_tTb4b4b4)Tb4b4b4(Te6edf3timeTb4b4b4.Te6edf3tv_usec Tff7b72/ T79c0ff1000Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72endif

Tff7b72#Tff7b72ifdef ARDUINO
T8b949e// return current time in float seconds since startup
Tff7b72static Tff7b72inline Tffa657double Te6edf3timeTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Tb4b4b4(Tffa657doubleTb4b4b4)Tb4b4b4(Te6edf3ltimeTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1000.0Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72else
T8b949e// return current time in float seconds since 00:00:00, January 1, 1970 (Unix Epoch)
Tff7b72static Tff7b72inline Tffa657double Te6edf3timeTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3timeval Te6edf3timeTb4b4b4; Tff7b72:Tff7b72:Te6edf3gettimeofdayTb4b4b4(Tff7b72&Te6edf3timeTb4b4b4, Tffa657NULLTb4b4b4)Tb4b4b4; Tff7b72return Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3timeTb4b4b4.Te6edf3tv_sec Tff7b72+ Tb4b4b4(Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3timeTb4b4b4.Te6edf3tv_usec Tff7b72/ T79c0ff1000000Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72endif

T8b949e// sleep for specified milliseconds
T8b949e//static inline void sleep(float seconds) { ::sleep(seconds); }
Tff7b72#Tff7b72ifdef ARDUINO
Tff7b72static Tff7b72inline Tffa657void Te6edf3sleepTb4b4b4(Tffa657float Te6edf3secondsTb4b4b4) Tb4b4b4{ Te6edf3delayTb4b4b4(Tb4b4b4(Tffa657uint32_tTb4b4b4)Tb4b4b4(Te6edf3seconds Tff7b72* T79c0ff1000Tb4b4b4)Tb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72else
Tff7b72static Tff7b72inline Tffa657void Te6edf3sleepTb4b4b4(Tffa657float Te6edf3secondsTb4b4b4) Tb4b4b4{ Te6edf3timespec Te6edf3timeTb4b4b4; Te6edf3timeTb4b4b4.Te6edf3tv_sec Tff7b72= Tb4b4b4(Tffa657time_tTb4b4b4)Tb4b4b4(Te6edf3secondsTb4b4b4)Tb4b4b4; Te6edf3timeTb4b4b4.Te6edf3tv_nsec Tff7b72= Tb4b4b4(Te6edf3seconds Tff7b72- Tb4b4b4(Tffa657floatTb4b4b4)Te6edf3timeTb4b4b4.Te6edf3tv_secTb4b4b4) Tff7b72* T79c0ff1000000000Tb4b4b4; Tff7b72:Tff7b72:Te6edf3nanosleepTb4b4b4(Tff7b72&Te6edf3timeTb4b4b4, Tffa657nullptrTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72endif
T8b949e//static inline void sleep(uint32_t milliseconds) { ::sleep((float)milliseconds / 1000.0); }

T8b949e// round decimal number to specified precision
T8b949e//static inline float round(float value, uint8_t precision) { return std::round(value / precision) * precision; }
T8b949e//static inline double round(double value, uint8_t precision) { return std::round(value / precision) * precision; }
Tff7b72static Tff7b72inline Tffa657double Te6edf3roundTb4b4b4(Tffa657double Te6edf3valueTb4b4b4, Tffa657uint8_t Te6edf3precisionTb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3stdTff7b72:Tff7b72:Te6edf3roundTb4b4b4(Te6edf3value Tff7b72/ Te6edf3precisionTb4b4b4) Tff7b72* Te6edf3precisionTb4b4b4; Tb4b4b4}

Tff7b72static Tff7b72inline Tffa657uint64_t Te6edf3from_bytes_big_endianTb4b4b4(Tff7b72const Tffa657uint8_tTff7b72* Te6edf3dataTb4b4b4, Tffa657size_t Te6edf3lenTb4b4b4) Tb4b4b4{
Tffa657uint64_t Te6edf3result Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657size_t Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3lenTb4b4b4; Tff7b72+Tff7b72+Te6edf3iTb4b4b4) Tb4b4b4{
Te6edf3result Tff7b72= Tb4b4b4(Te6edf3result Tff7b72<Tff7b72< T79c0ff8Tb4b4b4) Tff7b72| Te6edf3dataTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3resultTb4b4b4;
Tb4b4b4}

T8b949e// Detect endianness at runtime
Tff7b72static Tffa657int Te6edf3is_big_endianTb4b4b4(Tffa657voidTb4b4b4) Tb4b4b4{
Tffa657uint16_t Te6edf3test Tff7b72= T79c0ff0x0102Tb4b4b4;
Tff7b72return Tb4b4b4(Tb4b4b4(Tffa657uint8_tTff7b72*Tb4b4b4)Tff7b72&Te6edf3testTb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72=Tff7b72= T79c0ff0x01Tb4b4b4;
Tb4b4b4}

T8b949e// Byte swap functions
Tff7b72static Tffa657uint16_t Te6edf3swap16Tb4b4b4(Tffa657uint16_t Te6edf3valTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4(Te6edf3val Tff7b72<Tff7b72< T79c0ff8Tb4b4b4) Tff7b72| Tb4b4b4(Te6edf3val Tff7b72>Tff7b72> T79c0ff8Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72static Tffa657uint32_t Te6edf3swap32Tb4b4b4(Tffa657uint32_t Te6edf3valTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4(Tb4b4b4(Te6edf3val Tff7b72<Tff7b72< T79c0ff24Tb4b4b4) Tff7b72& T79c0ff0xFF000000Tb4b4b4) Tff7b72|
Tb4b4b4(Tb4b4b4(Te6edf3val Tff7b72<Tff7b72< T79c0ff8Tb4b4b4) Tff7b72& T79c0ff0x00FF0000Tb4b4b4) Tff7b72|
Tb4b4b4(Tb4b4b4(Te6edf3val Tff7b72>Tff7b72> T79c0ff8Tb4b4b4) Tff7b72& T79c0ff0x0000FF00Tb4b4b4) Tff7b72|
Tb4b4b4(Tb4b4b4(Te6edf3val Tff7b72>Tff7b72> T79c0ff24Tb4b4b4) Tff7b72& T79c0ff0x000000FFTb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e// Platform-independent replacements

Tff7b72static Tffa657uint16_t Te6edf3portable_htonsTb4b4b4(Tffa657uint16_t Te6edf3valTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3is_big_endianTb4b4b4(Tb4b4b4) Tff7b72? Te6edf3val Tff7b72: Te6edf3swap16Tb4b4b4(Te6edf3valTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72static Tffa657uint32_t Te6edf3portable_htonlTb4b4b4(Tffa657uint32_t Te6edf3valTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3is_big_endianTb4b4b4(Tb4b4b4) Tff7b72? Te6edf3val Tff7b72: Te6edf3swap32Tb4b4b4(Te6edf3valTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72static Tffa657uint16_t Te6edf3portable_ntohsTb4b4b4(Tffa657uint16_t Te6edf3valTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3is_big_endianTb4b4b4(Tb4b4b4) Tff7b72? Te6edf3val Tff7b72: Te6edf3swap16Tb4b4b4(Te6edf3valTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72static Tffa657uint32_t Te6edf3portable_ntohlTb4b4b4(Tffa657uint32_t Te6edf3valTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3is_big_endianTb4b4b4(Tb4b4b4) Tff7b72? Te6edf3val Tff7b72: Te6edf3swap32Tb4b4b4(Te6edf3valTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72#Tff7b72if defined(RNS_USE_ALLOCATOR)
Tff7b72static Tffa657void Te6edf3dump_allocator_statsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif

Tff7b72inline Tff7b72static Tffa657void Td2a8ffregister_filesystemTb4b4b4(Te6edf3FileSystemTff7b72& Te6edf3filesystemTb4b4b4) Tb4b4b4{
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffRegistering filesystem...Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3_filesystem Tff7b72= Te6edf3filesystemTb4b4b4;
Tb4b4b4}

T8b949e/*
inline static void register_filesystem(FileSystemImpl* filesystemimpl) {
TRACE("Registering filesystem...");
_filesystem = filesystemimpl;
}
*/

Tff7b72inline Tff7b72static Tffa657void Td2a8ffderegister_filesystemTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffDeregistering filesystem...Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3_filesystem Tff7b72= Tb4b4b4{Te6edf3TypeTff7b72:Tff7b72:Te6edf3NONETb4b4b4}Tb4b4b4;
Tb4b4b4}

Tff7b72inline Tff7b72static Te6edf3FileSystemTff7b72& Td2a8ffget_filesystemTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3_filesystemTb4b4b4;
Tb4b4b4}


Tff7b72inline Tff7b72static Tffa657bool Td2a8fffile_existsTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3file_pathTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_filesystemTb4b4b4) Tb4b4b4{
Te6edf3WARNINGTb4b4b4(Ta5d6ff"Ta5d6fffile_exists: filesystem not registeredTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffFileSystem has not been registeredTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3_filesystemTb4b4b4.Te6edf3file_existsTb4b4b4(Te6edf3file_pathTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72inline Tff7b72static Tffa657size_t Td2a8ffread_fileTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3file_pathTb4b4b4, Te6edf3BytesTff7b72& Te6edf3dataTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_filesystemTb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffFileSystem has not been registeredTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3_filesystemTb4b4b4.Te6edf3read_fileTb4b4b4(Te6edf3file_pathTb4b4b4, Te6edf3dataTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72inline Tff7b72static Tffa657size_t Td2a8ffwrite_fileTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3file_pathTb4b4b4, Tff7b72const Te6edf3BytesTff7b72& Te6edf3dataTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_filesystemTb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffFileSystem has not been registeredTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3_filesystemTb4b4b4.Te6edf3write_fileTb4b4b4(Te6edf3file_pathTb4b4b4, Te6edf3dataTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72inline Tff7b72static Te6edf3FileStream Td2a8ffopen_fileTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3file_pathTb4b4b4, Te6edf3RNSTff7b72:Tff7b72:Te6edf3FileStreamTff7b72:Tff7b72:Te6edf3MODE Te6edf3file_modeTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_filesystemTb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffFileSystem has not been registeredTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3_filesystemTb4b4b4.Te6edf3open_fileTb4b4b4(Te6edf3file_pathTb4b4b4, Te6edf3file_modeTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72inline Tff7b72static Tffa657bool Td2a8ffremove_fileTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3file_pathTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_filesystemTb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffFileSystem has not been registeredTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3_filesystemTb4b4b4.Te6edf3remove_fileTb4b4b4(Te6edf3file_pathTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72inline Tff7b72static Tffa657bool Td2a8ffrename_fileTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3from_file_pathTb4b4b4, Tff7b72const Tffa657charTff7b72* Te6edf3to_file_pathTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_filesystemTb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffFileSystem has not been registeredTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3_filesystemTb4b4b4.Te6edf3rename_fileTb4b4b4(Te6edf3from_file_pathTb4b4b4, Te6edf3to_file_pathTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72inline Tff7b72static Tffa657bool Td2a8ffdirectory_existsTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3directory_pathTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_filesystemTb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffFileSystem has not been registeredTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3_filesystemTb4b4b4.Te6edf3directory_existsTb4b4b4(Te6edf3directory_pathTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72inline Tff7b72static Tffa657bool Td2a8ffcreate_directoryTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3directory_pathTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_filesystemTb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffFileSystem has not been registeredTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3_filesystemTb4b4b4.Te6edf3create_directoryTb4b4b4(Te6edf3directory_pathTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72inline Tff7b72static Tffa657bool Td2a8ffremove_directoryTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3directory_pathTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_filesystemTb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffFileSystem has not been registeredTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3_filesystemTb4b4b4.Te6edf3remove_directoryTb4b4b4(Te6edf3directory_pathTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72inline Tff7b72static Te6edf3stdTff7b72:Tff7b72:Te6edf3listTff7b72<Te6edf3stdTff7b72:Tff7b72:Te6edf3stringTff7b72> Te6edf3list_directoryTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3directory_pathTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_filesystemTb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffFileSystem has not been registeredTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3_filesystemTb4b4b4.Te6edf3list_directoryTb4b4b4(Te6edf3directory_pathTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72inline Tff7b72static Tffa657size_t Te6edf3storage_sizeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_filesystemTb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffFileSystem has not been registeredTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3_filesystemTb4b4b4.Te6edf3storage_sizeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72inline Tff7b72static Tffa657size_t Te6edf3storage_availableTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_filesystemTb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffFileSystem has not been registeredTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3_filesystemTb4b4b4.Te6edf3storage_availableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72static Tffa657size_t Te6edf3heap_sizeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72static Tffa657size_t Td2a8ffheap_availableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72static Tffa657void Td2a8ffdump_heap_statsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;

Tb4b4b4} Tb4b4b4}

Served by rngit 1.4.2 - Generated in 0.03s